Skip to content

[1/8] Add a Trends screen that replaces Statistics - #2637

Open
Nutcasey wants to merge 15 commits into
LoopKit:next-devfrom
Nutcasey:redesign-1-trends
Open

Nutcasey wants to merge 15 commits into
LoopKit:next-devfrom
Nutcasey:redesign-1-trends

Conversation

@Nutcasey

@Nutcasey Nutcasey commented Nov 1, 2026 •

Copy link
Copy Markdown

Part 1 of the series splitting #2621. Updated after Pete's review (3 November 2026): Trends now replaces Statistics, each figure appears once, and the day page, Gaps and Export have moved to follow-up parts.

Trends reviews one period at a time: a day, 7, 14, 30 or 90 days. It opens from Settings → Trends, where Statistics was, as a sheet with a Done button.

  • Summary: average glucose with SD and CV, GMI with its IFCC value, carbs per day and boluses per day. Each tile carries its target.
  • Time in range: five bands, each with its target in its row and its hours a day of CGM-covered time.
  • Daily pattern (AGP).
  • Insulin: daily totals with the average, basal against its schedule, bolus split into manual, automatic and unknown, and "today so far, usually X U by now" when the period ends today.
  • Loop status: closed loop, limited and open loop, from Loop's stored settings.
  • One day: a one-day period leads with that day's timeline.

Trends after review, overview

Where the figures come from

  • Inside Loop's local history (the cache duration, 90 days by default) figures come from Loop's stores. For each kind of data the boundary is the later of the cache start and Loop's first record of that kind; before it, Trends reads Apple Health. The two never overlap.
  • Closed and open loop come from StoredSettings.dosingEnabled, which SettingsStore keeps for the cache duration, including the record before the period. A manual temp basal counts as open loop, as on the home screen since Show the loop as open while a manual temp basal is running #2649, from the temp basal's own record and its end or cancellation.
  • Manual and automatic are read from each bolus's own record. A bolus that doesn't record it shows as unknown, never as manual. Logged injections count as manual.
  • Scheduled basal is shown only for days Loop has its own schedule history, with "N of M days" when that's part of the period. Older days don't fall back to today's schedule. Dated settings bound both basal and target schedules: time before the first saved profile, or a saved record without that profile, stays unknown. Those gaps supply neither scheduled totals nor inferred basal delivery.
  • GMI always shows. "Best over 14 days with 70% CGM data" appears when the period is shorter or coverage is lower (the 2019 international consensus and ADA 2026 guidance).
  • Fingerstick readings are left out of every figure, as in Statistics.

Colours

One new colour set. Marks use Loop's existing glucose, insulin, carbs and accent; text uses .primary and .secondary; the AGP bands, target band and basal are those colours at reduced opacity. Time in range uses GlucoseBand.agpColor, which gains dark-mode variants (Current Setup picks these up). The period picker is a system segmented Picker.

The one addition is a darker bolus (light #A9480A, dark #FFA347). Plain insulin bolus beside faded insulin basal was too close to tell apart in use: insulin is only 2.3:1 on white, so no lighter tint of it reaches 3:1 against it. With the darker bolus and a card-coloured gap where bolus sits on basal, they're 4.7:1 in light mode and 4.4:1 in dark.

Commits

The first two are the original Trends and Statistics-parity commits, rebased onto next-dev f7b08cad. The review changes follow, one commit per point so each can be reviewed on its own:

  1. Replace Statistics with Trends
  2. Move the day page, Gaps and Export to follow-up parts
  3. Show each Trends figure once
  4. Show targets beside their figures instead of Aim lines
  5. Use Loop's existing colours in Trends
  6. Read closed and open loop from stored settings
  7. Follow the cache duration and mark partial older periods
  8. Stack Trends rows at the largest text sizes
  9. Remove the unused ValueTile
  10. Fix issues found testing the review changes
  11. Tighten dose boundaries and use a darker bolus colour
  12. Keep unrecorded schedule history unknown in Trends (Codex review)
  13. Keep chart labels readable at accessibility sizes (Codex review)

Screenshots

Annotated, with before and after where something was removed. From the loop simulator's demo data; its seeded boluses before 26 October have no manual/automatic flag, which is why much of the 14-day bolus shows as unknown.

Trends replaces Statistics Summary with aims in tiles Targets in each row

One Insulin card Loop status from stored settings One day, timeline only

N of M days notes Apple Health footnote Apple Health before Loop's first records

Colours, light Colours, dark Largest text

Also: Current Setup still working, Boluses tile with unknown.

Testing

On the loop simulator (iOS 27.0, Pump and CGM Simulators, 90 days of history), on next-dev f7b08cad:

  • 1, 7, 14, 30 and 90 days; previous and next; an older week from Apple Health; a week across the local/Health boundary; an empty period; light, dark and AX XXXL.
  • Apple Health filling days before Loop's first local records, checked by removing early local records from a copy of the store.
  • Settings → Trends → Done, and Current Setup still working.
  • Codex follow-up: AX XXXL chart labels use fewer ticks with the end dates anchored inside the plot; card titles and subtitles stack.

Selected LoopTests: 457 run, 455 pass. The two failures are BolusEntryViewModelTests.testCarbEntryDateAndAbsorptionTimeString and …String2, which fail the same way on plain next-dev ("12:00 PM" against "12:00"). LoopHistoryMathTests covers the boundary, manual temp basal, GMI and classification rules. The Codex follow-up adds a real-SettingsStore regression for schedule start dates, missing profiles and the preceding setting; restoring the old queries reproduces 5 U instead of the correct 3 U. LoopDataManagerTests passes 28/28 and LoopHistoryMathTests passes 32/32. HealthKit-hosted DeviceDataManagerTests were not run.

Building next-dev currently needs #2652 (WatchApp still links G7SensorKit after #2645). It isn't part of this PR.

Strings. New keys have translations in Loop's languages; native-speaker review is welcome. Statistics' strings and those only the moved screens used are removed. Shared keys gain missing translations; existing translations are unchanged. JSON and format-placeholder checks pass.

Deferred to later parts

  • Day page and Gaps, including stepping between days and the reasons Loop stopped running, as their own PR.
  • Export (PDF and CSV report), as its own PR so the report gets its own review.
  • Parts 2–6 will be restacked on this part once it settles; until then they still carry the pre-review Trends.

The series

#2621 is split into PRs in the order Pete suggested: statistics and Trends first, then the Logbook, then the home screen. Add carbs, the widget and Live Activity, and the appearance options follow as their own parts, and the day page with Gaps, and Export, now come as two more. Each part builds on the one before it and targets next-dev, so a PR shows the earlier parts' commits too. #2621 stays open as the combined reference until the series lands.

  1. [1/8] Add a Trends screen that replaces Statistics #2637 Trends, opened from Settings, replacing Statistics
  2. [2/6] Add a Logbook of the last 7 days #2638 Logbook, opened from Settings
  3. [3/6] Add the Now home screen with Now, Trends, Logbook and Settings tabs #2639 Now home screen with Now, Trends, Logbook and Settings tabs, and the New Interface toggle
  4. [4/6] Rebuild Add carbs around a live preview of the meal #2640 Redesigned Add carbs
  5. [5/6] Restyle the widget, Dynamic Island and Live Activity for the new interface #2641 Widget, Dynamic Island and Live Activity
  6. [6/6] Add Day and Night app icons and an appearance setting #2642 Day and Night app icons and the appearance setting
  7. Trends day page and Gaps (to be opened)
  8. Trends Export (to be opened)

Merging. With squash merges, each next PR needs a rebase onto next-dev once the previous one lands. I'll rebase each PR as the one before it merges.

Strings. Each part adds only its own catalogue entries, with their translations in Loop's languages. GitHub's line diff of Localizable.xcstrings can show deletions where Xcode's ordering interleaves new keys.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9

@ps2 ps2 left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for splitting this up. Trends reads well and the Statistics parity work is careful. Before this goes further I'd like to shrink it and remove the overlap with Statistics.

Replace Statistics. Trends should replace Statistics in this PR rather than sit beside it in Settings. Two screens answering the same question will confuse people, and the parity commit already covers what Statistics shows. Please remove the Statistics entry and the screen as part of this change.

Duplicated figures. Several numbers appear two or three times on one page:

  • Insulin per day and the basal/bolus split are in the Summary tile, the Basal and bolus card, and the Insulin per day chart's average line and legend. Could Summary stay focused on glucose (plus carbs and boluses), and Basal and bolus fold into the Insulin per day card, with Scheduled and Manual/Automatic under the chart?
  • Loop active in Summary repeats the Loop status card, and it covers a different window from the period's other figures. It's clearer only in Loop status, beside its coverage note.
  • "Usually X U by HH:MM" appears twice. One place is enough.

Aim lines. The Aim sentences, especially the six-target one under Time in range, are hard to scan. Showing each band's target in its row, or marking a figure that misses its target, would say the same with less text.

Colors. The PR adds 17 named colors, and most could reuse what Loop already has. glucose-ink, accent-ink, insulin-ink, bolus and carbs-ink are variants of the existing glucose, accent, insulin and carbs colors. agp-inner, agp-outer, target-band, basal and basal-edge can be those colors at reduced opacity, with no new color sets. ink-muted can be .secondary. The five range-* colors duplicate GlucoseBand.agpColor in Statistics (TimeInRangeBar.swift). Since Trends replaces Statistics, keep one time-in-range palette; your dark-mode variants are an improvement, so move them there. control-thumb goes away with a system segmented Picker.

Scope. Could the day page, Gaps and Export come as follow-up parts? Export in particular produces a shareable, clinical-looking report that deserves its own review.

Open/closed loop history. Loop keeps 90 days of data (Bundle.main.localCacheDuration, LOOP_LOCAL_CACHE_DURATION_DAYS), and localHistoryStart already uses it. Rather than a new UserDefaults record (LoopModeHistory, 100 days), please read closed/open loop from data Loop already stores. StoredSettings carries dosingEnabled with a date, and SettingsStore keeps those records for the cache duration. The provider already uses getStoredSettings for target history. If that doesn't work out, a new record should follow the other stores' design (Core Data in the cache store, expiring with localCacheDuration) rather than live in UserDefaults.standard. It's also worth checking that every closed-loop toggle path saves settings, so the history isn't missing changes.

"Loop keeps 7 days". Two strings hard-code this: the Loop status footnote and the day page's Apple Health note. The provider's window is localHistoryStart, which is the cache duration, 90 days by default, so the text is wrong for most builds. It should follow the cache duration rather than hard-code a number.

Older periods. For days beyond Loop's local history, how does the screen show that the Manual/Automatic split and the scheduled basal are partial or estimated?

Nutcasey and others added 13 commits November 3, 2026 19:29
Trends reviews one period at a time (a day, 7, 14, 30 or 90 days) on
one screen: summary tiles (average with SD and CV, GMI, insulin, carbs
and boluses per day, Loop active), time in range, the daily pattern
(AGP), basal and bolus, insulin per day and Loop status with its gaps.
A one-day period leads with that day's timeline. Tapping a day opens
a day page with the insulin timeline and active insulin and carbs,
stepping a day at a time. The period exports as a PDF report or a CSV
with one row per day.

Inside Loop's 7 days the figures come from Loop's own stores, so manual
and automatic boluses, temp basals, historical targets and presets are
known. Older days come from Apple Health. Closed and open loop are
recorded from launch, because Loop's automation history only covers
36 hours.

Trends opens from Settings, beside Statistics, as a sheet with its own
navigation and a Done button. Statistics and Current Setup are
unchanged.

This is part 1 of 6 splitting LoopKit#2621.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP7ynB62LNuuYMy3yvH
Trends now carries everything Statistics shows that it lacked, so it
can take Statistics' place:

- Consensus goals: average under 8.6 mmol/L (154 mg/dL), GMI under 7%
  and CV 36% or less under the summary tiles; time in range over 70%,
  under 25% above and 4% below, under 5% very high and 1% very low,
  and CGM active over 70% on the Time in range card.
- Scheduled basal under Basal in Basal and bolus: the schedule that
  applied over the same days (the stored profile with presets), or
  today's schedule where the profile history doesn't reach.
- "Usually X U by HH:MM": today's insulin against the median by this
  time over the last 14 days, from InsulinDeliveryHistory as on
  Statistics. Under Total so far on today's Day view, and under the
  Insulin per day chart on longer periods ending today.
- "CGM data covers 5 of 14 days." under Summary when readings start
  partway through the period.
- Typed-in (fingerstick) readings are left out of every figure, as on
  Statistics. The day timeline still draws them.

Each new line reuses a pattern already on the screen: the Aim
footnote, the indented line under Bolus, and the muted footnote.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP7ynB62LNuuYMy3yvH
Removes the Statistics screen and its Settings entry, and puts Trends where it was. GlucoseBand's display extension, SetupComparisonCharts, GlucoseStatistics and InsulinDeliveryHistory stay, because Current Setup uses them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
A one-day period still leads with its timeline but no longer opens a day page. The removed code, strings and tests come back in their own parts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Summary keeps glucose, carbs and boluses. Basal and bolus fold into the Insulin per day card, Loop active is only in Loop status, and "usually by now" appears once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Each summary tile carries its aim and each time-in-range band shows its target in its row. Misses are not coloured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Removes the 17 colour sets. Marks use the existing glucose, insulin, carbs and accent colours, text uses primary and secondary, and GlucoseBand.agpColor gains dark variants. The period selector is a system segmented Picker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Loop status reads dosingEnabled from SettingsStore, including the record before the period, instead of a UserDefaults record. A manual temp basal counts as open loop, as on the home screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
The Loop status note uses localCacheDuration instead of 7 days. Scheduled basal and the manual and automatic split cover only days Loop has itself, with a day count, and boluses of unknown kind are no longer counted as manual.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Time in range, basal and bolus, and Loop status rows stack at accessibility sizes instead of spilling or breaking words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Moves the smooth-curve helper into SetupComparisonCharts, its remaining user.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Reads Apple Health for days before Loop's first local records, per kind of data, without overlap. Classifies each bolus from its own record and shows unknown. Always shows GMI with its IFCC value, with a note when the period is short or coverage is low. Counts time-in-range hours over CGM-covered time, restores dark-mode tile backgrounds and matches the Settings chevron.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Limits the first-record scan to each week, treats logged injections as manual, lets a recorded manual temp basal end win, refreshes cached first records when stores change and lets the Boluses detail wrap. Adds one bolus colour set, so bolus stands apart from basal in light mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QHnVP6NkV9kiyLRBAeMMt9
Nutcasey added a commit to Nutcasey/Loop-1 that referenced this pull request Nov 3, 2026
@Nutcasey Nutcasey changed the title [1/6] Add a Trends screen for glucose, insulin and Loop status [1/8] Add a Trends screen that replaces Statistics Nov 3, 2026
@Nutcasey

Nutcasey commented Nov 3, 2026

Copy link
Copy Markdown
Author

Thanks, Pete. I've taken almost all of this, one commit per point (listed in the description). Point by point:

1. Replace Statistics

Trends should replace Statistics in this PR rather than sit beside it in Settings.

Done. The Statistics entry and screen are removed: StatisticsView, StatisticsViewModel, AGPChartView, DailyInsulinChartView and the TimeInRangeBar view, with their strings and the two README screenshots. Trends takes Statistics' place in Settings, above Current Setup.

Everything Current Setup shares with Statistics stays: the GlucoseBand display extension (now GlucoseBand+Display.swift), SetupComparisonCharts, GlucoseStatistics, InsulinDeliveryHistory and their tests.

Trends replaces Statistics

2. Duplicated figures

Could Summary stay focused on glucose (plus carbs and boluses)…

All three are done:

  • Summary is now Average, GMI, Carbs per day and Boluses per day.
  • Insulin per day is one card: the daily bars with the average line, then Basal with Scheduled under it, Bolus with Manual / Automatic under it, and Total. The rows double as the chart's legend.
  • Loop active is only in Loop status, beside its coverage note.
  • "Usually X U by HH:MM" appears once, under the Insulin card when the period ends today.

Summary Insulin card

3. Aim lines

Showing each band's target in its row, or marking a figure that misses its target, would say the same with less text.

The Aim sentences are gone. Each target sits beside its figure, muted:

  • Summary tiles: "aim < 8.6, CV ≤ 36%" under Average and "aim < 7%" under GMI.
  • CGM active: "· aim > 70%" beside its figure.
  • Time-in-range bands: each row ends with its target.

High and Low read "< 25% above range" and "< 4% below range", because those consensus targets cover both bands on that side, and a bare "< 25%" beside High alone would mislead. Misses aren't coloured; red stays for warnings.

Targets in each row

4. Colours

The PR adds 17 named colors, and most could reuse what Loop already has.

16 of the 17 are gone:

  • The -ink sets existed only so tinted text had enough contrast. Text now uses .primary and .secondary.
  • agp-inner, agp-outer, target-band and basal are glucose and insulin at reduced opacity.
  • ink-muted is .secondary.
  • The five range-* colours are gone, and their dark-mode variants moved into GlucoseBand.agpColor. There's one time-in-range palette, and Current Setup picks up the dark variants too.
  • The period selector is a system segmented Picker, so control-thumb is gone.

I'd like to keep one: a darker bolus (light #A9480A, dark #FFA347). We tried basal and bolus as one hue split only by lightness, and in use the two couldn't be told apart. Plain insulin is only 2.3:1 against white, so no lighter tint of it reaches 3:1 against bolus. With the darker bolus and a card-coloured gap where bolus sits on basal, they measure 4.7:1 in light mode and 4.4:1 in dark. If you'd rather solve this another way, I'm happy to change it.

Colours, light Colours, dark

5. Scope

Could the day page, Gaps and Export come as follow-up parts?

Done. The day page, the Gaps list and Export (PDF and CSV) are out of this PR, with their strings, code and tests. A one-day period still leads with that day's timeline, but it no longer opens a day page.

One day

6. Open/closed loop history

Rather than a new UserDefaults record… please read closed/open loop from data Loop already stores… check that every closed-loop toggle path saves settings.

Done:

  • The old record is gone. LoopModeHistory, its UserDefaults key and the LoopAppManager hook are removed.
  • Loop status reads stored settings. It takes dosingEnabled from getStoredSettings over the period, plus the last record before it, so the mode at the start of the period is known.
  • Toggle paths checked:
    • The Settings toggle, onboarding, the forced version update and the one-time legacy migration all go through mutateLoopSettings or storeSettings, and save a record.
    • Siri, remote commands and the watch can't change closed loop.
    • The SettingsViewModelDelegate.automaticDosingEnabled setter changes it without saving, but nothing calls it.
  • Show the loop as open while a manual temp basal is running #2649: a manual temp basal counts as open loop. It's taken from the temp basal dose itself and ends where the pump ended or cancelled it, rather than from the last run's error, so a later run failing for another reason doesn't hide it.

Loop status

7. "Loop keeps 7 days"

Fixed. The Loop status footnote reads "Covers …, from the start of Loop's records, which it keeps for 90 days", with the number from localCacheDuration. The day page's note left with the day page, and the "7 days" code comment is corrected.

8. Older periods

How does the screen show that the Manual/Automatic split and the scheduled basal are partial or estimated?

Before, it didn't: Scheduled used today's schedule for older days as if it were fact. Now:

  • Scheduled basal shows only for days Loop has its own schedule history, with a day count when that's part of the period ("Scheduled 28.0 U · 6 of 7 days").
  • Manual and automatic come from each bolus's own record. A bolus that doesn't record it shows as unknown, never as manual, and logged injections count as manual. Manual, automatic and unknown always add up to Bolus.
  • A period that's all from Apple Health gets a footnote: "Older days come from Apple Health, which doesn't record the basal schedule, and some boluses there don't say whether they were manual or automatic."
  • Weekly periods say how many days the averages cover ("weekly average · 6 of 90 days").

While checking this, I also found that days inside the cache window but before Loop's first records came up empty. Trends now reads Apple Health for those, with the boundary per kind of data at the later of the cache start and Loop's first record, and no overlap.

Partial week Apple Health week

Also fixed while testing

  • GMI always shows its mmol/mol value, as Statistics did, with "Best over 14 days with 70% CGM data" when the period is shorter or coverage is lower.
  • Time-in-range hours count only time with CGM readings.
  • Rows stack at the largest text sizes.

Deferred

  • Day page and Gaps come as their own PR, with stepping between days and the reasons Loop stopped running.
  • Export comes as its own PR, so the PDF and CSV report gets its own review.
  • Parts 2–6 ([2/6] Add a Logbook of the last 7 days #2638–[6/6] Add Day and Night app icons and an appearance setting #2642) will be restacked on this part once it settles. Until then they still carry the pre-review Trends.
  • Current Setup: its Since Change insulin shows "–". This PR doesn't change that code, which is the same as on next-dev, so I'll raise it separately.
  • Translations for the new strings would benefit from native-speaker review.

🤖 Generated with Claude Code

@Nutcasey Nutcasey left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex has reviewed PR #2637 using code-reviewer-cx, against next-dev f7b08cad, including the full diff and Pete's existing feedback. Codex has fixed all outstanding high-confidence issues found in this review. No further findings at or above 80/100 confidence remain.

Critical (90–100 confidence)

  • 98/100 — Schedule history extended into unknown time. LoopHistoryProvider.swift:107: the historical schedule queries backfilled the first saved profile and skipped records without a profile. Trends could therefore infer basal delivery and draw targets during unknown time. Fixed in 0081d73c: reporting uses each saved setting only for its recorded interval, including the setting before the requested start. A real-SettingsStore regression catches both leading unknown time and missing profiles; restoring the old queries produces 5 U instead of 3 U, and the corrected implementation passes.

Important (80–89 confidence)

  • 89/100 — Unreadable chart axes at accessibility text sizes. TrendsComponents.swift:732: the 90-day chart's dates overlapped at AX XXXL. Fixed in 596606a2: fewer axis labels, correctly anchored end dates, and stacked card titles/subtitles. The AGP and day timeline also reduce their axis labels at accessibility sizes. Verified on the loop simulator, including a before/after check of the insulin chart.

Verification

  • App build and build-for-testing succeeded, using the separate #2652 watch build fix locally; that fix is excluded from these commits.
  • Operated Settings → Trends, all five periods, previous/next navigation, older Apple Health data, empty periods, light/dark appearance and AX XXXL; Current Setup still opens.
  • 457 selected LoopTests: 455 passed, 2 failed. LoopDataManagerTests 28/28, LoopHistoryMathTests 32/32, GlucoseStatisticsTests 12/12.
  • The two failures are the already documented BolusEntryViewModelTests.testCarbEntryDateAndAbsorptionTimeString and …String2 locale assertions (12:00 PM versus 12:00). They also appear in the earlier pre-review run. HealthKit-hosted DeviceDataManagerTests were excluded; this is not a claim that the complete hosted suite passes.
  • git diff --check, catalogue JSON and new-string placeholder checks pass. Existing translations are unchanged.

The description now includes these fixes and the final test results. The PR is open and ready for human review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants